import axios from 'axios';
import axiosAdapterUniapp from 'axios-adapter-uniapp';
// import { useStore } from 'vuex';
import $store from '@/store/index';
// const $store = useStore();
let version = ` h5`;
// #ifdef APP | APP-PLUS
// try {
//   plus.runtime.getProperty(plus.runtime.appid, function (widgetInfo) {
//     version = ` ${plus.runtime.appid} V${widgetInfo.version}.${widgetInfo.versionCode}`;
//   });
// } catch (error) {}
// #endif

class $Axios {
  instance: any;
  constructor() {
    this.instance = axios.create({
      timeout: 60000,
      adapter: axiosAdapterUniapp
    });
    // 在组件中使用
    /**
     * 增加条件编译区分 H5 与 APP 打包接口连接
     */
    // #ifdef APP | APP-PLUS
    this.instance.defaults.baseURL = import.meta.env.VITE_APP_BASE_URL;
    // #endif
    // #ifndef APP
    this.instance.defaults.baseURL = import.meta.env.VITE_BASE_URL;
    // #endif

    uni.setStorageSync('baseUrl', this.instance.defaults.baseURL);
    this.instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
    this.instance.defaults.headers.get['Content-Type'] = 'application/json;charset=UTF-8';

    //请求拦截
    this.instance.interceptors.request.use(
      (config: any) => {
        const newConfig = {
          ...config,
          params: config.params || {}
        };
        const USER = uni.getStorageSync('ADMIN-WEB-USER')
          ? JSON.parse(uni.getStorageSync('ADMIN-WEB-USER') || '{}')
          : null;
        //newConfig.headers['token'] = USER ? USER.token : ''; //token值
        //newConfig.headers['userid'] = USER ? USER.userid : ''; //userid
        // #ifdef APP | APP-PLUS
        try {
          newConfig.headers['user-agent'] = plus.navigator.getUserAgent() + version; //版本号
        } catch (error) {}
        // #endif
        return newConfig;
      },
      (error: any) => {
        console.log(error);
      }
    );
    //请求响应拦截
    this.instance.interceptors.response.use(
      (res: any) => (res.status === 200 ? Promise.resolve(res) : Promise.reject(res)),
      // 服务器状态码不是200的情况

      async (error: any) => {
        if (error.response.status) {
          switch (error.response.status) {
            // 1003: 未登录
            // 未登录则跳转登录页面，并携带当前页面的路径
            // 在登录成功后返回当前页面，这一步需要在登录页操作。
            case 1003:
              console.log(1003);
              break;
            case 401:
              // await uniPush.close();
              // uni.clearStorage();
              break;
            // 403 token过期
            // 登录过期对用户进行提示
            // 清除本地token和清空vuex中token对象
            // 跳转登录页面
            case 403:
              //window.location.href = '/login';
              break;
            // 404请求不存在
            case 404:
              break;
            // 其他错误，直接抛出错误提示
            default:
          }
          return Promise.reject(error.response);
        }
      }
    );
  }
}

// 等待后台修改
// if (res.status === 200 && res.code == 200) {
//   Promise.resolve(res);
// } else {
//   uni.showToast({
//     icon: 'none',
//     title: res.data?.msg || '业务异常'
//   });
//   Promise.reject(res);
// }

// const instance = axios.create({timeout:6000});
// instance.defaults.baseURL = process.env.NODE_ENV === 'development'?'http://bms.car900.com':'/';

// instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
// instance.defaults.headers.get['Content-Type'] = 'application/json;charset=UTF-8';

// //请求拦截
// instance.interceptors.request.use(
//   (config:any) => {
//     config.params = config.params || {}

//     config.headers['sessionId'] = '7ce27ac6-1412-45c3-93d9-2141431a12b1';//sessionId值

//     return config
//   },
//   (error:any) => {
//     console.log(error);
//   }
// )
// //请求响应拦截
// instance.interceptors.response.use(
//   (res:any) => (res.status === 200 ? Promise.resolve(res) : Promise.reject(res)),
//   // 服务器状态码不是200的情况

//   (error:any) => {
//     if (error.response.status) {
//       switch (error.response.status) {
//         // 401: 未登录
//         // 未登录则跳转登录页面，并携带当前页面的路径
//         // 在登录成功后返回当前页面，这一步需要在登录页操作。
//         case 401:
//           console.log(401)
//           break
//         // 403 token过期
//         // 登录过期对用户进行提示
//         // 清除本地token和清空vuex中token对象
//         // 跳转登录页面
//         case 403:
//           break
//         // 404请求不存在
//         case 404:
//           break
//         // 其他错误，直接抛出错误提示
//         default:
//       }
//       return Promise.reject(error.response)
//     }
//   }
// )
export default $Axios;
